var http = require('https'); //使用https模块
var fs = require('fs');//文件读写
var path = require('path')
var cheerio = require('cheerio');//jquery写法获取所得页面dom元素
var request = require('request');//发送request请求
var i = 0;
var url = "https://movie.douban.com/subject/26946510/?from=subject-page";
const base="https://movie.douban.com";
//初始url 
function fetchPage(x) { //封装一层函数,方便递归调用
    startRequest(x);
}
var dataArray = []
var nextLinkArray = []
function startRequest(x) {
    //采用http模块向服务器发起一次get请求      
    http.get(x, function(res) { //get到x网址，成功执行回调函数
        var html = ''; //用来存储请求网页的整个html内容
        res.setEncoding('utf-8'); //防止中文乱码
        //监听data事件，每次取一块数据
        res.on('data', function(chunk) {
            html += chunk;
        });
        //监听end事件，如果整个网页内容的html都获取完毕，就执行回调函数
        res.on('end', function() {
            var $ = cheerio.load(html); //采用cheerio模块解析html
            var news_item = {
                //获取电影的标题
                title: $('.related-info h2 i').text().trim(),
                //i是用来判断获取页数
                i: i = i + 1,

            };

            console.log(news_item); //打印新闻信息
            var news_title = $('#wrapper > #content > h1 > span:nth-of-type(1)').text().trim();
          
            
           var mmId =  /\/(\d+)/.exec(x)[1]|| 'default'
           console.log(mmId,'创建的文件夹名字')
            savedContent($, news_title,mmId); //存储每篇文章的内容及文章标题

            // savedImg($, news_title,mmId); //存储每篇文章的图片及图片标题
            //存储json文件
            const reg = /^(https:\/\/movie\.douban\.com\/subject)\/(\d+)\/?from=subject-page$/;
            const links = $("#recommendations .recommendations-bd a") 
            for(let i=0;i<links.length;i++){
                var newlink =  $(links[i]).attr('href')
                if(nextLinkArray.length>101){
                    return
                }else{
                    nextLinkArray.push(newlink)
                }
                
            }
            // console.log(links,'所有链接')
            nextLinkArray = [...new Set(nextLinkArray)]
            console.log(nextLinkArray)
            // nextLinkArray.map((ele=>$(ele).attr("href").trim()))
            //下一篇电影的url
            nextLink = $(".recommendations-bd dl:last-child dd a").attr('href')
           
            if(i <= 100) { //爬取10页
                fetchPage(nextLinkArray[i]);
            }
        });

    }).on('error', function(err) { //http模块的on data,on end ,on error事件
        console.log(err);
    });

}
//存储标题函数

function savedContent($, news_title,mmId) {
     //创建.dist文件
     var distPath = path.resolve(process.cwd(), `./dist`);
     if (!fs.existsSync(distPath)) {
         fs.mkdirSync(distPath);
       }
     //创建.dist/images文件
     var imagesPath = path.resolve(process.cwd(), `./dist/images`);
     if (!fs.existsSync(imagesPath)) {
         fs.mkdirSync(imagesPath);
       }
    var dataObj ={}
    dataObj.title = news_title
    $('#link-report span').each(function(index, item) {
        var x = $(this).text();
        dataObj.desc = $('#link-report span').text()
        x = x + '\n';
        // console.log(x,'——————————————————描述')
       
       var  newPath = path.resolve(process.cwd(), `./dist/images/${mmId}`);
         console.log(newPath,'判断路径')
        if (!fs.existsSync(newPath)) {
            fs.mkdirSync(newPath);
          }
        //将新闻文本内容一段一段添加到/data文件夹下，并用新闻的标题来命名文件
        fs.appendFile(`./dist/images/${mmId}/${ news_title} .txt`, x, 'utf-8', function(err) {
            if(err) {
                console.log(err);
            }
        });
    })
    $('#mainpic img').each(function(index, item) {
        var img_title = $('#content h1 span').text().trim(); //获取图片的标题
        if(img_title.length > 35 || img_title == "") { //图片标题太长
            img_title = "Null";
        }
        var img_filename = img_title + '.jpg';
        var img_src = $(this).attr('src'); //获取图片的url

        //采用request模块，向服务器发起一次请求，获取图片资源
        request.head(img_src, function(err, res, body) {
            if(err) {
                console.log(err);
            }
        });
        var  newPath = path.resolve(process.cwd(), `./dist/images/${mmId}`);
        console.log(newPath,'判断路径')
       if (!fs.existsSync(newPath)) {
           fs.mkdirSync(newPath);
         }
        request(img_src).pipe(fs.createWriteStream(`./dist/images/${mmId}/${img_filename}` ));
        //通过流的方式，把图片写到本地/image目录下，并用标题和图片的标题作为图片的名称。
        dataObj.imgUrl = `./images/${mmId}/${img_filename}`
    })
    console.log( dataObj)
    dataArray.push(dataObj)
    let  loadData= JSON.stringify(dataArray, null ,2);
    fs.writeFile('./dist/data.json',loadData,function(err){
        if(err){
            throw err
        }else{
            console.log('写入成功')
        }

    })
}
//该函数的作用：在本地存储所爬取到的图片资源
// function savedImg($, news_title,mmId) {
//     $('#mainpic img').each(function(index, item) {
//         var img_title = $('#content h1 span').text().trim(); //获取图片的标题
//         if(img_title.length > 35 || img_title == "") { //图片标题太长
//             img_title = "Null";
//         }
//         var img_filename = img_title + '.jpg';
//         var img_src = $(this).attr('src'); //获取图片的url

//         //采用request模块，向服务器发起一次请求，获取图片资源
//         request.head(img_src, function(err, res, body) {
//             if(err) {
//                 console.log(err);
//             }
//         });
//         var  newPath = path.resolve(process.cwd(), `./dist/images/${mmId}`);
//         console.log(newPath,'判断路径')
//        if (!fs.existsSync(newPath)) {
//            fs.mkdirSync(newPath);
//          }
//         request(img_src).pipe(fs.createWriteStream(`./dist/images/${mmId}/${img_filename}` ));
//         //通过流的方式，把图片写到本地/image目录下，并用标题和图片的标题作为图片的名称。
//     })
// }
//存储json数据
fetchPage(url); //主程序开始运行